const useStorage = ($storage) => {
    /**
     * 根据 key 值获取储存在 storage 中的值
     * @param key storage key
     */
    const get = (key) => {
      let value = $storage.getItem(key);
      try {
        value = JSON.parse(value);
        return value;
      } catch {
        return value;
      }
    }
  
    /**
     * 根据 key 值向 storage 中储存值
     * @param key storage key
     * @param value 需要储存在 storage 中的值
     */
    const add = (key, value) => {
      return $storage.setItem(key, value ? JSON.stringify(value) : value);
    }
  
    /**
     * 根据 key 值移除储存在 storage 中的值
     * @param key storage key
     */
    const del = (key) => {
      return $storage.removeItem(key);
    }
  
    /**
     * 移除除了 key 之外的所有储存在 storage 中的值
     * @param key storage key
     */
    const clearExcept = (key) => {
      for (let i = 0; i < $storage.length; i++) {
        const itemKey = $storage.key(i);
        if (itemKey && itemKey !== key) {
          $storage.removeItem(itemKey);
        }
      }
    }
  
    /**
     * 移除所有储存在 storage 中的值
     */
    const clearAll = () => {
      for (const itemKey in $storage) {
        if (itemKey) {
          $storage.removeItem(itemKey);
        }
      }
    }
  
    return {
      get,
      add,
      del,
      clearExcept,
      clearAll,
    }
  }
  
  const SessionStorageUser = useStorage(window.sessionStorage || sessionStorage)
  const LocalStorageUser = useStorage(window.localStorage || localStorage)
  
  export {
    SessionStorageUser,
    LocalStorageUser,
  }
  